package com.hmall.pay.domain.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 支付订单实体类
 * 对应数据库表：pay_order
 * 用于记录支付相关的订单信息，与业务订单（trade.order）形成关联
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("pay_order")
public class PayOrder implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     * 采用MyBatis-Plus的ASSIGN_ID策略（雪花算法生成）
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 业务订单号
     * 关联业务系统中的订单ID（如交易订单表的order_id）
     */
    private Long bizOrderNo;

    /**
     * 支付单号
     * 支付系统生成的唯一订单号，用于标识支付交易
     */
    private Long payOrderNo;

    /**
     * 支付用户ID
     * 发起支付的用户标识
     */
    private Long bizUserId;

    /**
     * 支付渠道编码
     * 标识支付来源渠道（如支付宝、微信、余额等）
     * 示例值：ALIPAY、WECHAT、BALANCE
     */
    private String payChannelCode;

    /**
     * 支付金额
     * 存储为整数避免浮点数精度问题
     */
    private Integer amount;

    /**
     * 支付类型
     * 1：H5支付，2：小程序支付，3：公众号支付，4：扫码支付，5：余额支付
     */
    private Integer payType;

    /**
     * 支付状态
     * 0：待提交，1：待支付，2：支付超时或取消，3：支付成功
     */
    private Integer status;

    /**
     * 拓展字段
     * 存储不同支付渠道的特有参数（JSON格式）
     * 例如支付宝的auth_code、微信的openid等
     */
    private String expandJson;

    /**
     * 第三方返回业务码
     * 支付渠道返回的业务结果码（如支付宝的10000表示成功）
     */
    private String resultCode;

    /**
     * 第三方返回提示信息
     * 支付渠道返回的结果描述
     */
    private String resultMsg;

    /**
     * 支付成功时间
     * 记录支付完成的时间戳
     */
    private LocalDateTime paySuccessTime;

    /**
     * 支付超时时间
     * 支付订单的失效时间（如30分钟后超时）
     */
    private LocalDateTime payOverTime;

    /**
     * 支付二维码链接
     * 扫码支付时生成的二维码URL
     */
    private String qrCodeUrl;

    /**
     * 创建时间
     * 记录支付订单创建的时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     * 记录支付订单最后一次更新的时间
     */
    private LocalDateTime updateTime;

    /**
     * 创建人
     * 记录创建该支付订单的用户ID
     */
    private Long creater;

    /**
     * 更新人
     * 记录最后更新该支付订单的用户ID
     */
    private Long updater;

    /**
     * 逻辑删除标识
     * true表示已删除，false表示未删除
     */
    private Boolean isDelete;
}